package org.ma1.cripto.aes.gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Hashtable;
import java.util.StringTokenizer;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class DescripcionPanel extends JPanel implements IListener {
	
	private static final String FICHERO_DESCRIPCION = "res/descripcion.txt";
	
	private JLabel nombre;
	private JLabel descripcion;
	private Hashtable<String, String> tabla;
	
	
	public DescripcionPanel() {
		super();
		inicializar();
		cargarTabla();
		this.setLayout(new BorderLayout());
		this.add(nombre,BorderLayout.NORTH);
		this.add(descripcion,BorderLayout.SOUTH);
		SoporteDispararCambio.getInstanceSoporteOperaciones().addListener(this);
	}
	
	private void cargarTabla() {
		tabla = new Hashtable<String, String>();
		try {
			BufferedReader br = new BufferedReader(
					new InputStreamReader(
							DescripcionPanel.class.getResourceAsStream(FICHERO_DESCRIPCION)));
			String linea;
			while((linea=br.readLine())!=null) {
				tabla.put(linea, br.readLine());
			}
		} catch (Exception e) {
			JOptionPane.showConfirmDialog(null, "Error al cargar: "+FICHERO_DESCRIPCION);
		}
	}
	
	private void inicializar() {
		nombre = new JLabel("Sin operacion");
		descripcion = new JLabel("Sin descripcion");
		nombre.setForeground(Color.blue);
		nombre.setFont(new Font("Arial",Font.BOLD,20));
		descripcion.setFont(new Font("Arial",Font.BOLD,16));
	}
	
	public void setOperacion(String nombre) {
		String desc = tabla.get(nombre);
		if (desc!=null) {
			this.nombre.setText(nombre);
			this.descripcion.setText(desc);
		} else {
			this.nombre.setText("Sin operacion");
			this.descripcion.setText("Sin descripcion");
		}
		repaint();
	}

	public void handle(int tipo, String txt) {
		if (tipo == IListener.TIPO_OPERACION_EJECUTADA) {
			StringTokenizer st = new StringTokenizer(txt);
			setOperacion(st.nextToken());
		}
	}
}
